package stream01;

import org.junit.Test;

import java.util.*;
import java.util.stream.Stream;

/**
 * 集合或数组获取Stream流对象
 *  集合:
 *    Collection体系(单列集合体系):都可以通过Collection接口中定义的Stream()方法来获取流对象
 *      List
 *      Set
 *    Map体系(key=value双列集合体系):Map需要先转换成单列集合体系(通过keySet()或entrySet()),才能通过Stream()方法获取流对象
 *      HashMap
 *      TreeMap
 *  数组:
 *    通过Stream中的静态方法
 *       public static<T> Stream<T> of(T... values)
 */
public class StreamDemo02 {
    @Test
    public void test01(){
        Stream<Object> stream01 = new ArrayList<>().stream();//Stream上的泛型和集合上的泛型一致
                                                             //我们可以理解为将集合上的元素添加到Stream流中等待操作
        Stream<Integer> stream02 = new HashSet<Integer>().stream();//Stream上的泛型和集合上的泛型一致
    }
    
    @Test
    public void test02(){
        Stream<Integer> stream01 = new HashMap<Integer, String>().keySet().stream();//将Map转换成单列Set集合,然后调用stream()方法获取流对象
                                                                                    //Stream上的泛型代表keySet中key的类型
                                                                                    //将HashMap中的key添加到Stream流中等待操作
        Stream<Map.Entry<Integer, String>> stream02 = new HashMap<Integer, String>().entrySet().stream();
        //将一个个entry对象(封装key=value)添加Stream流中

        Stream<Integer> stream03 = new TreeMap<Integer, String>().keySet().stream();

    }

    @Test
    public void test03(){
        int[] arr = {1, 3, 9};
        Stream<int[]> stream01 = Stream.of(arr);//如果通过基本数据类型获取一个流对象,此时流中只有一个元素：数组对象,而不是数组中的元素

        Integer[] arr2 = {1, 3, 9};
        Stream<Integer> stream02 = Stream.of(arr2);//如果通过基本类型对应的包装类构造的引用类型数组,再去获取流对象,此时相当于将数组中的元素添加到流中

        Stream<String> stream03 = Stream.of("abc", "ghk", "def");//将来操作Stream中指定的字符串
        Stream<Integer> stream04 = Stream.of(1, 3, 9);//将来操作Stream中指定的每个int对应的Integer对象
    }

}
